﻿using System;
using System.Drawing;
using System.Windows.Forms;
using Onshi.POS.Articulos;
using Onshi.POS.Articulos.Vistas;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Enumeradores;
using System.Collections.Generic;
using Onshi.POS.Modelo.Entidades;

namespace Onshi.POS.Formularios.Cliente
{
    public partial class ArticulosAltaModificacionUnidad : FormularioBase, IArticulosAltaModificacionUnidad
    {
        #region Constructores

        public ArticulosAltaModificacionUnidad()
        {
            InitializeComponent();
            presentador = new ArticulosAltaModificacionUnidadPresentador(this);
            Text = "Alta de Articulo - Unidad";
            estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.ALTA;
            txtCodigo.Focus();
        }

        public ArticulosAltaModificacionUnidad(Int32 idArticulo)
            : this()
        {
            Text = "Modificación de Articulo - Unidad";
            this.idArticulo = idArticulo;
            estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.MODIFICACION;
        }

        #endregion

        #region Atributos
        private Int32 idArticulo;
        private EnumEstadoAltaBajaModificacionHabilitacion estadoAbm;
        private ArticulosAltaModificacionUnidadPresentador presentador;
        #endregion

        #region Propiedades
        public Int32 IdArticulo 
        {
            get { return idArticulo; }
            set { idArticulo = value;}
        }

        public Int32 IdRubroArticulo
        {
            get { return (Int32)ucDevolverRubrosArticulos.cboRubrosArticulos.SelectedValue; }
            set { ucDevolverRubrosArticulos.cboRubrosArticulos.SelectedValue = value; }
        }

        public Int32 IdDescuentoRecargo
        {
            get{return (Int32)ucDevolverDescuentoRecargos.cboDescuentoRecargos.SelectedValue;}
            set{ucDevolverDescuentoRecargos.cboDescuentoRecargos.SelectedValue = value;}
        }

        public Int32 IdMarca
        {
            get{return (Int32)ucDevolverMarcas.cboMarcas.SelectedValue;}
            set{ucDevolverMarcas.cboMarcas.SelectedValue = value;}
        }

        public Byte IdTipoComisionArticulo
        {
            get { return (Byte)cboDevolverTiposComisionesArticulos.SelectedValue; }
            set{ cboDevolverTiposComisionesArticulos.SelectedValue = value; }
        }

        public Byte IdTipoImpuestoArticulo
        {
            get { return (Byte)cboDevolverTiposImpuestosArticulos.SelectedValue; }
            set { cboDevolverTiposImpuestosArticulos.SelectedValue = value; }
        }

        public Byte IdTipoCostoArticulo
        {
            get { return (Byte)cboDevolverTiposCostosArticulos.SelectedValue; }
            set { cboDevolverTiposCostosArticulos.SelectedValue = value; }
        }

        public Int32 IdPromocion
        {
            get { return 0; }
            set { }
        }

        public Image Imagen
        {
            get { return picImagen.Image; }
            set { picImagen.Image = value; }
        }

        public String Observacion
        {
            get { return txtObservacion.Text; }
            set { txtObservacion.Text = value; }
        }

        public string Codigo
        {
            get { return txtCodigo.Text; }
            set { txtCodigo.Text = value; }
        }

        public String Nombre
        {
            get { return txtNombre.Text; }
            set { txtNombre.Text = value; }
        }

        public Int32 ExistenciaMinima
        {
            get { return (Int32)numExistenciaMinima.Value; }
            set { numExistenciaMinima.Value = value; }
        }

        public Int32 ExistenciaMaxima
        {
            get { return (Int32)numExistenciaMaxima.Value; }
            set { numExistenciaMaxima.Value = value; }
        }

        public Decimal Costo
        {
            get { return numCosto.Value; }
            set { numCosto.Value = value; }
        }

        public Decimal Comision
        {
            get { return numComision.Value; }
            set { numComision.Value = value; }
        }

        public Decimal ComisionMaxima
        {
            get { return numComisionMaxima.Value; }
            set { numComisionMaxima.Value = value; }
        }

        public Decimal Iva
        {
            get { return numIva.Value; }
            set { numIva.Value = value; }
        }

        public Decimal Impuesto
        {
            get { return numImpuesto.Value; }
            set { numImpuesto.Value = value; }
        }

        public Boolean EstaEliminado
        {
            get { return chkEstaEliminado.Checked; }
            set { chkEstaEliminado.Checked = value; }
        }

        public EnumEstadoAltaBajaModificacionHabilitacion EstadoABM
        {
            get { return estadoAbm; }
        }

        public IList<ArticuloAtributoDetalle> AtributosDetalles
        {
            get{ return (IList<ArticuloAtributoDetalle>)bsArticulosAtributosDetalles.List; }
        }


        public IList<ArticuloAtributoDetallesUbicaciones> AtributosDetallesUbicaciones
        {
            get { return (IList<ArticuloAtributoDetallesUbicaciones>)bsMatrizArticulos.List; }
        }
        
        public Int32 IdArticuloAtributo
        {
            get { return (Int32)ucDevolverArticulosAtributos.cboArticulosAtributos.SelectedValue; }
        }

        public IList<Ubicacion> Ubicaciones
        {
            set
            {
                colUbicacion.DataSource = value;
                colUbicacion.DisplayMember = "Nombre";
                colUbicacion.ValueMember = "Id";
            }
        }

        #endregion

        #region Eventos

        #region Eventos Atributos Detalle

        private void btnEliminarAtributo_Click(object sender, EventArgs e)
        {
            if (bsArticulosAtributosDetalles.Current != null)
            {
                if (MessageBox.Show("¿Esta seguro que desea eliminar el atributo seleccionado?", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    bsArticulosAtributosDetalles.RemoveCurrent();
            }
        }

        private void btnAgregarAtributo_Click(object sender, EventArgs e)
        {
            var ok = true;
            errArticulos.Clear();
            if (ucDevolverArticulosAtributos.cboArticulosAtributos.SelectedValue == null)
            {
                ok = false;
                errArticulos.SetError(ucDevolverArticulosAtributos, Properties.Settings.Default.CompletarCampo);
            }
            else if (txtValorAtributoDetalle.Text == String.Empty)
            {
                ok = false;
                errArticulos.SetError(txtValorAtributoDetalle, Properties.Settings.Default.CompletarCampo);
            }
            if (ok)
            {
                try
                {
                    ArticuloAtributoDetalle articuloAtributoDetalle = new ArticuloAtributoDetalle();
                    articuloAtributoDetalle.Atributo = (ArticuloAtributo)ucDevolverArticulosAtributos.cboArticulosAtributos.SelectedItem;
                    articuloAtributoDetalle.Valor = txtValorAtributoDetalle.Text;
                    bsArticulosAtributosDetalles.Add(articuloAtributoDetalle);

                    ArticuloAtributoDetallesUbicaciones articuloAtributoDetallesUbicaciones = new ArticuloAtributoDetallesUbicaciones();
                    articuloAtributoDetallesUbicaciones.AtributoDetalle = articuloAtributoDetalle;
                    articuloAtributoDetallesUbicaciones.AtributoDetalleValor = articuloAtributoDetalle.Valor;
                    bsMatrizArticulos.Add(articuloAtributoDetallesUbicaciones);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                finally
                {
                    LimpiarCampos();
                }
            }
        }

        private void LimpiarCampos()
        {
            txtValorAtributoDetalle.Text = String.Empty;
        }
        #endregion

        private void btnAceptar_Click(Object sender, EventArgs e)
        {
            var ok = true;
            errArticulos.Clear();
            if (txtCodigo.Text.Trim() == String.Empty)
            {
                ok = false;
                errArticulos.SetError(txtCodigo, Properties.Settings.Default.CompletarCampo);
            }
            if (txtNombre.Text.Trim() == String.Empty)
            {
                ok = false;
                errArticulos.SetError(txtNombre, Properties.Settings.Default.CompletarCampo);
            }
            if (ok)
            {
                try
                {
                    presentador.Aceptar();
                    DialogResult = DialogResult.OK;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnCancelar_Click(Object sender, EventArgs e)
        {
            Close();
        }

        private void ArticulosAbm_Load(Object sender, EventArgs e)
        {
            cboDevolverTiposCostosArticulos.ActualizarListado();
            cboDevolverTiposImpuestosArticulos.ActualizarListado();
            ucDevolverDescuentoRecargos.ActualizarListado();
            ucDevolverMarcas.ActualizarListado();
            ucDevolverRubrosArticulos.ActualizarListado();
            ucDevolverArticulosAtributos.ActualizarListado();
            ucDevolverArticulosAtributos.CambioCombo += new EventHandler(ucDevolverArticulosAtributos_CambioCombo);
            cboDevolverTiposComisionesArticulos.ActualizarListado();
            presentador.Inicializar();
        }

        void ucDevolverArticulosAtributos_CambioCombo(object sender, EventArgs e)
        {
            LimpiarCampos();
        }

        private void btnImagenAgregar_Click(Object sender, EventArgs e)
        {
            if (dlgImagen.ShowDialog() == DialogResult.OK && dlgImagen.FileName != String.Empty)
                picImagen.Load(dlgImagen.FileName);
        }

        private void btnImagenQuitar_Click(Object sender, EventArgs e)
        {
            if (picImagen.Image != null && MessageBox.Show("¿Está seguro que desea quitar la imagen actual?", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                picImagen.Image = null;
        }
        #endregion

        private void grdArticuloAtributoDetalleUbicacion_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            switch (e.ColumnIndex)
            {
                case 0:
                    ArticuloAtributoDetallesUbicaciones articuloAtributoDetallesUbicaciones = new ArticuloAtributoDetallesUbicaciones();
                    articuloAtributoDetallesUbicaciones.AtributoDetalleDescripcion = grdArticuloAtributoDetalleUbicacion.Rows[e.RowIndex].Cells[1].Value.ToString();
                    articuloAtributoDetallesUbicaciones.AtributoDetalleValor = grdArticuloAtributoDetalleUbicacion.Rows[e.RowIndex].Cells[2].Value.ToString();
                    bsMatrizArticulos.Add(articuloAtributoDetallesUbicaciones);
                    break;
            }
        }

        private void grdArticuloAtributoDetalleUbicacion_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            ((ArticuloAtributoDetallesUbicaciones)bsMatrizArticulos.Current).Ubicacion.Id = (Int32)grdArticuloAtributoDetalleUbicacion.Rows[e.RowIndex].Cells[3].Value;
        }
    }
}
